﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.Entities.Comunes;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;
using GC2.Funciones.General;

public partial class Admin_GastosImpuestos : GenericPage
{
    #region Propiedades

    Usuarios usuario = new Usuarios();
    List<Impuestos> listaTasas = new List<Impuestos>();
    GC2.Funciones.General.FunctionsSite funciones = new FunctionsSite();

    //protected List<ComprasDet> listaComprasDet = new List<ComprasDet>();
    private List<ComprasDet> listaComprasDet
    {
        get
        {
            return (List<ComprasDet>)Session["listaComprasDet"];
        }
        set
        {
            Session["listaComprasDet"] = value;
        }
    }

    private string scriptSession
    {
        get
        {
            return (string)Session["scriptSession"];
        }
        set
        {
            Session["scriptSession"] = value;
        }
    }

    private Cajas oCaja
    {
        get
        {
            return (Cajas)Session["oCaja"];
        }
        set
        {
            Session["oCaja"] = value;
        }
    }

    #endregion

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];
                BMPFCompras bmPFCompras = new BMPFCompras(Connection);
                PFCompras pfCompras = bmPFCompras.BMPFComprasGet();
                List<Meses> listaMeses = ListaMeses();
                foreach (Meses mes in listaMeses)
                {
                    if (mes.Mes == pfCompras.PFMes)
                    {
                        lblPFMes.Text = mes.Nombre;
                        Session["pfCompras"] = pfCompras;
                        break;
                    }
                }
                if (lblPFMes.Text == "")
                {
                    btnAgregar.Enabled = false;
                    btnBuscarConcepto.Enabled = false;
                    btnEliminar.Enabled = false;
                    btnGuardar.Enabled = false;
                    btnLimpiar.Enabled = false;
                    btnNuevaCompra.Enabled = false;
                    lblMensaje.Text = "Falta establecer Periodo Fiscal.";
                    mpeMensaje.Show();
                    return;
                }
                lblPFAnio.Text = pfCompras.PFAnio.ToString();
                int iAccion = 1;
                if (!String.IsNullOrEmpty(Request.QueryString["Accion"]))
                {
                    iAccion = Convert.ToInt16(Request.QueryString["Accion"].ToString());
                }
                Session["Accion"] = iAccion;
                listaComprasDet = new List<ComprasDet>();
                Session["listaComprasDet"] = listaComprasDet;

                int iTasas = 0;
                iTasas = CargarTasas();
                if (iTasas == 0)
                {
                    btnAgregar.Enabled = false;
                    btnBuscarConcepto.Enabled = false;
                    btnEliminar.Enabled = false;
                    btnGuardar.Enabled = false;
                    btnLimpiar.Enabled = false;
                    btnNuevaCompra.Enabled = false;
                    lblMensaje.Text = "Falta cargar Tasas de Impuestos (Parametros).";
                    mpeMensaje.Show();
                    return;
                }
                btnGuardar.Visible = false;

                if (iAccion == 1)
                {
                    NuevaCompra();
                    btnEliminar.Visible = false;
                }
                else
                {
                    CargarCCostos(iAccion);
                }

                if (iAccion == 1)
                {
                    VerificaCaja();
                }
                
                if (iAccion == 2)
                {
                    CargarCompra();
                }
                if (iAccion == 3)
                {
                    CargarCompra();
                }
            }
            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnLimpiar_Click
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
            ActualizarTotalCompra();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCancelar_Click
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Seguridad/Default.aspx", false);
    }
    #endregion

    #region btnGuardar_Click
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
              bool bNu = funciones.isNumeric(txtIdConcepto.Text);
              if (bNu)
              {
                  int iConcepto = Convert.ToInt16(txtIdConcepto.Text);
                  if (iConcepto < 1001)
                  {
                      btnGuardar.Enabled = false;
                      lblMensaje.Text = "Este concepto no puede cargarse como Gasto.";
                      mpeMensaje.Show();
                      return;
                  }
              }
              else
              {
                  lblMensaje.Text = "Debe seleccionar Concepto del Gasto.";
                  mpeMensaje.Show();
                  return;
              }
            
            DateTime dFecha = DateTime.Parse(Fecha.GetFecha().ToString());
            PFCompras pfCompras = (PFCompras)Session["pfCompras"];

            if (pfCompras.PFMes == dFecha.Month && pfCompras.PFAnio == dFecha.Year)
            {
                Decimal dPago = 0;
                if (txtPago.Text != "")
                {
                    
                    dPago = Convert.ToDecimal(txtPago.Text.Trim());
                }
                //Decimal dCtaCte = 0;
                //if (txtCtaCte.Text != "")
                //{
                //    dCtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim());
                //}
                Decimal dTotal = 0;
                if (txtTotal.Text != "")
                {
                    dTotal = Convert.ToDecimal(txtTotal.Text.Trim());
                }
                //Decimal dTemp = dPago + dCtaCte;
                Decimal dTemp = dPago;
                if (dTotal == dTemp)
                {
                    int iAccion = Convert.ToInt16(Session["Accion"]);

                    if (txtTotal.Text != "" && dTotal > 0)
                    {
                        if (iAccion == 1)
                        {
                            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
                            if (listaComprasDet.Count > 1)
                            {
                                Guardar();
                            }
                            else
                            {
                                lblMensaje.Text = "Debe informar Impuestos con Importe.";
                                mpeMensaje.Show();
                            }
                        }
                    }
                    else
                    {
                        lblMensaje.Text = "Debe informar Importes.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "La suma de Pago no conforman el Total.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "La Fecha no corresponde al Período Fiscal.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnNuevaCompra_Click
    protected void btnNuevaCompra_Click(object sender, EventArgs e)
    {
        try
        {
            NuevaCompra();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtPago_TextChanged
    protected void txtPago_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtPago.Text != "")
            {
                Decimal dTotal = Convert.ToDecimal(txtTotal.Text);
                Decimal dPago = Convert.ToDecimal(txtPago.Text.Trim());
                if (dPago > dTotal)
                {
                    lblMensaje.Text = "Importe de Pago Incorrecto.";
                    mpeMensaje.Show();
                }
                else
                {
                    Decimal dSaldo = dTotal - dPago;
                    //txtCtaCte.Text = Convert.ToDecimal(dSaldo).ToString();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtCtaCte_TextChanged
    //protected void txtCtaCte_TextChanged(object sender, EventArgs e)
    //{
    //    try
    //    {
    //        if (txtCtaCte.Text != "")
    //        {
    //            Decimal dTotal = Convert.ToDecimal(txtTotal.Text);
    //            Decimal dSaldo = Convert.ToDecimal(txtCtaCte.Text.Trim());
    //            if (dSaldo > dTotal)
    //            {
    //                lblMensaje.Text = "Importe de Cta. Cte. Incorrecto.";
    //                mpeMensaje.Show();
    //            }
    //            else
    //            {
    //                Decimal dPago = dTotal - dSaldo;
    //                txtPago.Text = Convert.ToDecimal(dPago).ToString();
    //            }
    //        }
    //    }
    //    catch (Exception ex) { ErrorUI(ex); }
    //}
    #endregion

    #region btnEliminar_Click
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            Eliminar();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnBuscarConcepto_Click
    /// <summary>
    /// Responde al boton Buscar Concepto
    /// CBendayan 29/05/2008
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnBuscarConcepto_Click(object sender, EventArgs e)
    {
        try
        {
            Conceptos concepto = new Conceptos();
            lblAccion.Text = "Cargando Gastos con Impuestos";

            txtIdConcepto.Text = "";
            txtConcepto.Text = "";
            concepto.Id_Tipo = 0;

            concepto.Id_Tipo = 1;
            Session["Tipo"] = "Egresos";

            btnGuardar.Enabled = true;

            List<Conceptos> listaConceptos = new List<Conceptos>();
            BMConceptos bmConceptos = new BMConceptos(Connection);
            listaConceptos = bmConceptos.BMConceptosSearch(concepto);
            Session["listaConceptos"] = listaConceptos;
            BuscarConcepto();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtIdConcepto_TextChanged
    /// <summary>
    /// CBendayan 29/05/2008
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void txtIdConcepto_TextChanged(object sender, EventArgs e)
    {
        try
        {
            lblAccion.Text = "Agregando Concepto";
            BuscarConcepto();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    #endregion

    #region cboTasas_SelectedIndexChanged
    protected void cboTasas_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int iTasa = int.Parse(cboTasas.SelectedItem.Value);
            listaTasas = (List<Impuestos>)Session["listaTasas"];
            if (iTasa == 6) // Impuesto Fijo ( no lleva pocentaje)
            {
                txtTasa.Text = "0";
            }
            else
            {
                foreach (Impuestos item in listaTasas)
                {
                    if (iTasa == item.Id)
                    {
                        decimal dTasa = decimal.Parse(item.Tasa.ToString());
                        txtTasa.Text = dTasa.ToString();
                    }
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnAgregar_Click
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        try
        {
            bool bSi = funciones.isNumeric(txtIdConcepto.Text);
            if (bSi)
            {
                int iConcepto = Convert.ToInt16(txtIdConcepto.Text);
                if (iConcepto < 1001)
                {
                    lblMensaje.Text = "Este concepto no puede cargarse como Gasto.";
                    mpeMensaje.Show();
                    return;
                }
                txtIdConcepto.ReadOnly = true;
                btnBuscarConcepto.Enabled = false;

                if (txtMonto.Text != "")
                {
                    Decimal dMonto = Convert.ToDecimal(txtMonto.Text);
                    if (dMonto > 0)
                    {
                        AgregarItem();
                    }
                    else
                    {
                        lblMensaje.Text = "Debe informar Importe del Gasto.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "Debe informar Importe del Gasto.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe seleccionar Concepto del Gasto.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gridDataBaund
    protected void gridDataBaund()
    {
        try
        {
            gvComprasDet.DataSource = listaComprasDet;
            gvComprasDet.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvComprasDet_PageIndexChanging
    protected void gvComprasDet_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            try
            {
                gvComprasDet.PageIndex = e.NewPageIndex;
                gridDataBaund();
            }
            catch (Exception ex) { ErrorUI(ex); }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvComprasDet_RowDeleting
    protected void gvComprasDet_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            ComprasDet comprasDet = new ComprasDet();
            comprasDet.Item = listaComprasDet[e.RowIndex].Item;
            if (comprasDet.Item == 1)
            {
                Limpiar();
            }
            else
            {
                List<ComprasDet> listaTemp = listaComprasDet;
                listaComprasDet = new List<ComprasDet>();
                foreach (ComprasDet item in listaTemp)
                {
                    if (item.Item != comprasDet.Item)
                    {
                        listaComprasDet.Add(item);
                    }
                }
                Session["listaComprasDet"] = listaComprasDet;
                ActualizarGrilla();
                ActualizarTotalCompra();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvComprasDet_RowDataBound
    protected void gvComprasDet_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int iAccion = Convert.ToInt16(Session["Accion"]);
                if (iAccion == 3)
                {
                    e.Row.Cells[3].Visible = false;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtMonto_TextChanged
    protected void txtMonto_TextChanged(object sender, EventArgs e)
    {
        try
        {
            bool bNu = funciones.isNumeric(txtIdConcepto.Text);
            if (bNu)
            {
                int iConcepto = Convert.ToInt16(txtIdConcepto.Text);
                if (iConcepto < 1001)
                {
                    btnGuardar.Enabled = false;
                    lblMensaje.Text = "Este concepto no puede cargarse como Gasto.";
                    mpeMensaje.Show();
                    return;
                }
                txtIdConcepto.ReadOnly = true;
                btnBuscarConcepto.Enabled = false;

                bool bSi = funciones.isNumeric(txtMonto.Text.Trim());
                if (bSi)
                {
                    txtMonto.ReadOnly = true;
                    ComprasDet comprasDet = new ComprasDet();
                    comprasDet.Id_Articulo = int.Parse(txtIdConcepto.Text);
                    comprasDet.Articulo = txtConcepto.Text;
                    comprasDet.Monto = decimal.Parse(txtMonto.Text.Trim());
                    comprasDet.Total = comprasDet.Monto;
                    comprasDet.Item = 1;
                    listaComprasDet = new List<ComprasDet>();
                    listaComprasDet.Add(comprasDet);
                    Session["listaComprasDet"] = listaComprasDet;
                    btnGuardar.Visible = true;
                }
                else
                {
                    lblMensaje.Text = "El Importe del Gasto no es correcto.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe seleccionar Concepto del Gasto.";
                mpeMensaje.Show();
            }

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion

    #region Métodos

    #region BuscarConcepto
    /// <summary>
    /// CBendayan 29/05/2008
    /// </summary>
    public void BuscarConcepto()
    {
        try
        {
            CargaConceptos();
            List<Conceptos> listaConceptos = new List<Conceptos>();
            listaConceptos = (List<Conceptos>)Session["listaConceptos"];
            Conceptos concepto = new Conceptos();
            if (txtIdConcepto.Text.Trim() != "")
            {
                concepto.Id_Concepto = Convert.ToInt16(txtIdConcepto.Text.Trim());
            }
            concepto.Concepto = txtConcepto.Text.Trim();
            

            bool encontrado = false;
            if (concepto.Id_Concepto > 0)
            {
                foreach (Conceptos item in listaConceptos)
                {
                    if (item.Id_Concepto == concepto.Id_Concepto)
                    {
                        txtIdConcepto.Text = item.Id_Concepto.ToString();
                        txtConcepto.Text = item.Concepto;
                        txtCodEx.Text = item.CodEx;
                        encontrado = true;
                        break;
                    }
                    //if (item.Concepto == concepto.Concepto)
                    //{
                    //    txtIdConcepto.Text = item.Id_Concepto.ToString();
                    //    txtConcepto.Text = item.Concepto;
                    //    encontrado = true;
                    //    break;
                    //}
                }
            }

            if (!encontrado)
            {
                txtIdConcepto.Text = "";
                txtIdConcepto.Text = "";
                #region dispararPopUp(hacePostBack)

                scriptSession = @"
            <script language=""javascript"" type=""text/javascript"">
            <!--
                function mostrarConcepto()
                {
                    var stringURL = 'BuscarConcepto.aspx?pStation=0';
                    var oINPUTS = document.getElementsByTagName (""INPUT"");
                    for(var a=0;a<oINPUTS.length; a++)
                    {
                        //Validaciones para cuando el control fue arrastrado a un PopUP (Sin MasterPage)

                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtIdConcepto')
                        {
                            //alert('U1a: &IdConcepto = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&IdConcepto=' + oINPUTS[a].getAttribute(""value"");
                        }
                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtConcepto')
                        {  
                            //alert('U2a: &Concepto = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Concepto=' + oINPUTS[a].getAttribute(""value"");
                        }
                         if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtCodEx')
                        {  
                            //alert('U23: &CodEx = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&CodEx=' + oINPUTS[a].getAttribute(""value"");
                        }
                    }
                    // alert(stringURL);
                    var newWin = window.open(stringURL, ""popup"", ""menubar=no, resizable=no, scrollbars=yes, height=550, width=550, left=100, top=100"");
                }
                mostrarConcepto();
            //-->
            </script>
            ";

                Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptA", scriptSession);
                #endregion
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargaConceptos
    public void CargaConceptos()
    {
        try
        {
            Conceptos concepto = new Conceptos();
            lblAccion.Text = "Agregando Concepto";


            concepto.Id_Tipo = 1;
            Session["Tipo"] = "Egresos";

            List<Conceptos> listaConceptos = new List<Conceptos>();
            BMConceptos bmConceptos = new BMConceptos(Connection);
            listaConceptos = bmConceptos.BMConceptosSearch(concepto);
            Session["listaConceptos"] = listaConceptos;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Guardar
    public void Guardar()
    {
        try
        {
            BMCompras bmCompras = new BMCompras(Connection);
            Compras compra = new Compras();
            BMComprasDet bmComprasDet = new BMComprasDet(Connection);

            compra = bmCompras.BMComprasGetNext();
            txtIdCompra.Text = compra.Id_Compras.ToString();

            // datos para Cabecera de Compras
            compra.Id_Compras = Convert.ToInt16(txtIdCompra.Text.Trim());
            compra.Gasto = 1;
            Usuarios usuario = new Usuarios();
            usuario = (Usuarios)Session["UsuarioActual"];
            compra.Id_Usuario = usuario.Id_Usuario;
            compra.Id_Estado = 1;
            compra.Estado = "Activo";
            compra.Fecha = Fecha.GetFecha();
            compra.Factura = txtFactura.Text;
            compra.Id_Proveedor = long.Parse(txtIdConcepto.Text);
            compra.Proveedor = txtConcepto.Text;
            compra.CodEx = txtCodEx.Text;
            PFCompras pfCompras = (PFCompras)Session["pfCompras"];
            compra.PFMes = pfCompras.PFMes;
            compra.PFAnio = pfCompras.PFAnio;
            //compra.CtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim());
            BMCajas bmCaja = new BMCajas(Connection);
            Cajas caja = new Cajas();
            caja.Id_Usuario = compra.Id_Usuario;
            caja = bmCaja.BMCajasAbiertaByUsuario(caja);
            compra.Id_Caja = caja.Id_Caja;
            compra.Obs = txtObs.Text;
            compra.Pago = Convert.ToDecimal(txtPago.Text.Trim());
            compra.CCostos = Convert.ToInt16(cboCCostos.SelectedItem.Value);

            // Grabo Detalles
            List<ComprasDet> listaComprasDet = new List<ComprasDet>();
            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
            int item = 0;
            foreach (ComprasDet compraDet in listaComprasDet)
            {
                if (compraDet.Total > 0)
                {
                    item++;
                    compraDet.Item = item;
                    compraDet.Id_Compras = compra.Id_Compras;
                    compra.Total += compraDet.Total;
                    bmComprasDet.BMComprasDetInsert(compraDet);
                }
            }

            // Grabo Cabecera Compras
            bmCompras.BMComprasInsert(compra);
            lblAccion.Text = "Gasto Guardado";

            //// Imputacion Cta. Cte.
            //if (compra.CtaCte > 0)
            //{
            //    Proveedores proveedor = new Proveedores();
            //    BMProveedores bmProveedores = new BMProveedores(Connection);
            //    proveedor.Id_Proveedor = compra.Id_Proveedor;
            //    proveedor = bmProveedores.BMProveedoresGetOne(proveedor);
            //    Decimal dTemp = proveedor.Saldo;
            //    proveedor.Saldo = dTemp + compra.CtaCte;
            //    bmProveedores.BMProveedoresUpdate(proveedor);

            //    proveedor = null;
            //    bmProveedores = null;
            //}

            // Grabo Egreso
            if (compra.Pago > 0)
            {
                BMEgresos bmEgresos = new BMEgresos(Connection);
                Egresos egreso = new Egresos();
                egreso = bmEgresos.BMEgresosGetNext();
                egreso.Id_Compra = compra.Id_Compras;
                egreso.Id_Proveedor = compra.Id_Proveedor;
                egreso.Concepto = txtConcepto.Text;
                egreso.Fecha = Fecha.GetFecha();
                egreso.Id_Caja = caja.Id_Caja;
                egreso.Id_Concepto = 3;
                egreso.Id_Usuario = compra.Id_Usuario;
                egreso.Monto = compra.Pago;
                egreso.Observaciones = "Gasto Nro. " + compra.Id_Compras;
                bmEgresos.BMEgresosInsert(egreso);
            }

            btnNuevaCompra.Visible = true;
            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region NuevaCompra
    public void NuevaCompra()
    {
        try
        {
            DateTime dtHoy = DateTime.Now.Date;
            string sFecha = dtHoy.ToString().Remove(11);
            Fecha.SetFecha(Convert.ToDateTime(sFecha));

            btnNuevaCompra.Visible = false;
            btnLimpiar.Visible = true;
            btnGuardar.Visible = true;

            Limpiar();
            lblAccion.Text = "Carga Nuevo Gasto";

            Session["Accion"] = 1;

            txtFactura.Text = "";
            txtIdConcepto.Text = "";
            txtIdConcepto.ReadOnly = false;
            btnBuscarConcepto.Enabled = true;

            cboCCostos.Enabled = true;
            CargarCCostos(1);
            cboCCostos.SelectedIndex = 0;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Limpiar
    public void Limpiar()
    {
        try
        {
            listaComprasDet = new List<ComprasDet>();
            txtMonto.Text = "";
            txtMonto.ReadOnly = false;
            btnBuscarConcepto.Enabled = true;
            txtPago.Text = "";
            //txtCtaCte.Text = "";
            txtTotal.Text = "";
            txtObs.Text = "";
            txtCodEx.Text = "";
            cboTasas.SelectedIndex = 0;
            txtConcepto.Text = "";
            txtIdCompra.Text = "";
            txtImpuesto.Text = "0";
            ActualizarGrilla();
            ActualizarTotalCompra();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarCompra
    public void CargarCompra()
    {
        try
        {
            trCarga1.Visible = false;
            trCarga2.Visible = false;
            trCarga3.Visible = false;

            Compras compra = new Compras();
            compra.Id_Compras = Convert.ToInt32(Request.QueryString["Id_Compras"].ToString());
            compra.Gasto = 1;
            compra.CCostos = 999;

            BMCompras bmCompras = new BMCompras(Connection);
            List<Compras> listaCompras = new List<Compras>();
            listaCompras = bmCompras.BMComprasSearch(compra, compra);
            Session["Compra"] = listaCompras[0];
            txtIdCompra.Text = listaCompras[0].Id_Compras.ToString();
            txtIdConcepto.Text = listaCompras[0].Id_Proveedor.ToString();
            txtConcepto.Text = listaCompras[0].Proveedor;
           
            Fecha.SetFecha(listaCompras[0].Fecha);
            decimal dTemp = Convert.ToDecimal(listaCompras[0].Pago);
            dTemp = Math.Round(dTemp, 2);
            txtPago.Text = dTemp.ToString();
            dTemp = Convert.ToDecimal(listaCompras[0].CtaCte);
            dTemp = Math.Round(dTemp, 2);
            dTemp = Convert.ToDecimal(listaCompras[0].Total);
            dTemp = Math.Round(dTemp, 2);
            txtTotal.Text = dTemp.ToString();
            txtObs.Text = listaCompras[0].Obs;

            int iIndex = 0;
            foreach (ListItem liItem in cboCCostos.Items)
            {
                if (liItem.Value == listaCompras[0].CCostos.ToString())
                {
                    cboCCostos.SelectedIndex = iIndex;
                    break;
                }
                iIndex++;
            }
            cboCCostos.Enabled = false;

            if (listaCompras[0].PFAnio > 0)
            {
                tdFactura1.Visible = true;
                tdFactura2.Visible = true;
                txtFactura.Text = listaCompras[0].Factura;
                lblPF.Visible = true;
                lblPFMes.Visible = true;
                lblPFAnio.Visible = true;
                List<Meses> listaMeses = ListaMeses();
                foreach (Meses mes in listaMeses)
                {
                    if (mes.Mes == listaCompras[0].PFMes)
                    {
                        lblPFMes.Text = mes.Nombre;
                        break;
                    }
                }
                lblPFAnio.Text = listaCompras[0].PFAnio.ToString();
            }

            BMComprasDet bmComprasDet = new BMComprasDet(Connection);
            List<ComprasDet> listaComprasDet = new List<ComprasDet>();
            ComprasDet compraDet = new ComprasDet();
            compraDet.Id_Compras = listaCompras[0].Id_Compras;

            listaComprasDet = bmComprasDet.BMComprasDetGetAll(compraDet);
            Session["listaComprasDet"] = listaComprasDet;

            ActualizarGrilla();

            ActualizarTotalCompra();

            lblAccion.Text = "Ver Gasto - Boton Eliminar = anula Gasto";
            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;
            btnNuevaCompra.Visible = false;
            btnBuscarConcepto.Visible = false;
            txtPago.Attributes.Add("readonly", "readonly");

            btnAgregar.Enabled = false;
            Fecha.Attributes.Add("readonly", "readonly");
            txtObs.Attributes.Add("readonly", "readonly");
            if (listaCompras[0].Id_Estado != 1)
            {
                btnEliminar.Enabled = false;
            }

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarTotalCompra
    protected void ActualizarTotalCompra()
    {
        try
        {
            Decimal dTotal = 0;
            foreach (ComprasDet item in listaComprasDet)
            {
                dTotal += item.Total;
            }
            txtTotal.Text = dTotal.ToString();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Eliminar
    public void Eliminar()
    {
        try
        {
            // Elimina Gasto y revierte caja 
            BMCompras bmCompras = new BMCompras(Connection);
            Compras compra = new Compras();
            compra = (Compras)Session["Compra"];
            compra.Obs = "Anulada: " + DateTime.Now.ToString();
            compra.Id_Estado = 2;
            compra.Estado = "Anulado";
            bmCompras.BMComprasUpdate(compra);

            //if (txtCtaCte.Text != "")
            //{
            //    Decimal dCtaCte = Convert.ToDecimal(txtCtaCte.Text);
            //    if (dCtaCte > 0)
            //    {
            //        BMProveedores bmProveedores = new BMProveedores(Connection);
            //        Proveedores proveedor = new Proveedores();
            //        proveedor.Id_Proveedor = Convert.ToInt64(txtIdProveedor.Text);
            //        proveedor = bmProveedores.BMProveedoresGetOne(proveedor);
            //        Decimal dSaldo = dCtaCte * (-1);
            //        proveedor.Saldo = proveedor.Saldo - dSaldo;
            //        bmProveedores.BMProveedoresUpdateSaldo(proveedor);
            //    }
            //}

            if (txtPago.Text != "")
            {
                Decimal dPago = Convert.ToDecimal(txtPago.Text);
                if (dPago > 0)
                {
                    BMEgresos bmEgresos = new BMEgresos(Connection);
                    Egresos egreso = new Egresos();
                    egreso = bmEgresos.BMEgresosGetNext();
                    BMCajas bmCaja = new BMCajas(Connection);
                    Cajas caja = new Cajas();
                    Usuarios usuario = new Usuarios();
                    usuario = (Usuarios)Session["UsuarioActual"];
                    caja.Id_Usuario = usuario.Id_Usuario;
                    caja = bmCaja.BMCajasAbiertaByUsuario(caja);
                    egreso.Concepto = "Gasto anulado";
                    egreso.Id_Compra = compra.Id_Compras;
                    egreso.Fecha = Fecha.GetFecha();
                    egreso.Id_Caja = caja.Id_Caja;
                    egreso.Id_Proveedor = Convert.ToInt64(txtIdConcepto.Text);
                    egreso.Id_Concepto = 3;
                    egreso.Id_Usuario = usuario.Id_Usuario;
                    egreso.Monto = dPago * (-1);
                    egreso.Observaciones = "Gasto Anulado Nro. " + txtIdCompra.Text;
                    bmEgresos.BMEgresosInsert(egreso);
                }
            }

            //listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
            //foreach (ComprasDet item in listaComprasDet)
            //{
            //    if (item.Kilos > 0)
            //    {
            //        item.Kilos = item.Kilos * (-1);
            //        ActualizaLotes(item);
            //    }
            //}

            lblAccion.Text = "Gasto Eliminado";
            btnEliminar.Enabled = false;
        }
        catch (Exception ex) { throw ex; }
    }
    #endregion

    #region CargarTalonarios
    protected void CargarTalonarios()
    {
        try
        {
            //cboTalon.Enabled = true;
            //ListItem item0 = new ListItem();
            //item0.Value = "0";
            //item0.Text = "Sin Factura";
            //cboTalon.Items.Add(item0);
            //ListItem item1 = new ListItem();
            //item1.Value = "1";
            //item1.Text = "Con Factura";
            //cboTalon.Items.Add(item1);
            //tdFactura1.Visible = false;
            //tdFactura2.Visible = false;
            //trTasa.Visible = false;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarTasas
    protected int CargarTasas()
    {
        int iCantTasas = 0;
        try
        {
            listaTasas = new List<Impuestos>();

            BMImpuestos bmImpuestos = new BMImpuestos(Connection);
            Impuestos pImpuesto = new Impuestos();
            pImpuesto.Tipo = "C";
            listaTasas = bmImpuestos.BMImpuestosGetAll(pImpuesto);
            Session["listaTasas"] = listaTasas;

            foreach (Impuestos itemImpuesto in listaTasas)
            {
                if (itemImpuesto.Tasa != 0)
                {
                    ListItem liItem = new ListItem();
                    liItem.Value = itemImpuesto.Id.ToString();
                    liItem.Text = itemImpuesto.Nombre;
                    cboTasas.Items.Add(liItem);
                }
            }
            ListItem listItem = new ListItem();
            listItem.Value = "6";
            listItem.Text = "Impuesto Fijo";
            cboTasas.Items.Add(listItem);
            cboTasas.SelectedIndex = 0;
            iCantTasas = listaTasas.Count;
            if (iCantTasas > 0)
            {
                if (cboTasas.SelectedItem.Value == listaTasas[0].Id.ToString())
                {
                    txtTasa.Text = listaTasas[0].Tasa.ToString();
                }
            }
            
        }
        catch (Exception ex) { ErrorUI(ex); }

        return iCantTasas;
    }
    #endregion

    #region ActualizarGrilla
    protected void ActualizarGrilla()
    {
        try
        {
            Session["listaComprasDet"] = listaComprasDet;
            gridDataBaund();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region AgregarItem
    protected void AgregarItem()
    {
        try
        {
            // Hidrata nuevo item y agregar a la lista de items
            ComprasDet nuevoItem = new ComprasDet();
            nuevoItem.Id_Articulo = Convert.ToInt16(txtIdConcepto.Text);
            nuevoItem.Id_Rubro = 0;
            nuevoItem.Id_SubRubro = 0;
            //nuevoItem.Id_Compras = Convert.ToInt64(txtIdCompra.Text);     se actualizara al Grabar
            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
            int iItems = listaComprasDet.Count;
            iItems++;
            nuevoItem.Item = iItems;
            nuevoItem.TTasa = Convert.ToInt16(cboTasas.SelectedItem.Value);
            decimal dTasa = decimal.Parse(txtTasa.Text);
            nuevoItem.Tasa = Decimal.Round(dTasa, 3);
            decimal dMonto = decimal.Parse(txtMonto.Text.Trim());
            decimal dImpuesto = 0;
            bool bSi = funciones.isNumeric(txtImpuesto.Text);
            if (bSi)
            {
                dImpuesto = decimal.Parse(txtImpuesto.Text.Trim());
                if (dImpuesto == 0)
                {
                    dImpuesto = dMonto * dTasa;
                }
                nuevoItem.Impuesto = Decimal.Round(dImpuesto, 2);
                nuevoItem.Total = nuevoItem.Impuesto;
                nuevoItem.Articulo = cboTasas.SelectedItem.Text;
                listaComprasDet.Add(nuevoItem);
                Session["listaComprasDet"] = listaComprasDet;

                ActualizarTotalCompra();

                ActualizarGrilla();
                lblAccion.Text = "Cargando Gastos";
            }
            else
            {
                lblMensaje.Text = "El monto del Impuesto no es correcto.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarCCostos
    private void CargarCCostos(int iAccion)
    {
        try
        {
            List<CentrosCostos> listaCCostos = new List<CentrosCostos>();
            BMCentrosCostos bmCCostos = new BMCentrosCostos(Connection);
            if (iAccion == 1)
            {
                listaCCostos = bmCCostos.BMCentrosCostosGetAllActivos();
            }
            else
            {
                listaCCostos = bmCCostos.BMCentrosCostosGetAll();
            }
            foreach (CentrosCostos ccostos in listaCCostos)
            {
                ListItem liItem = new ListItem();
                liItem.Value = ccostos.IdCentrosCostos.ToString();
                liItem.Text = ccostos.Nombre;
                cboCCostos.Items.Add(liItem);
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region VerificaCaja
    public void VerificaCaja()
    {
        try
        {
            if (oCaja == null)
            {
                Cajas oCajatmp = new Cajas();
                oCaja = oCajatmp;
            }
            oCaja.Id_Usuario = UsuarioActual().Id_Usuario;
            BMCajas bmCajas = new BMCajas(Connection);
            oCaja = bmCajas.BMCajasAbiertaByUsuario(oCaja);
            if (oCaja.Id_Caja > 0)
            {
                TraeCaja(oCaja);
            }
            else
            {
                lblAccion.Text = "No hay caja abierta";
                btnBuscarConcepto.Enabled = false;
                btnNuevaCompra.Enabled = false;
                btnAgregar.Enabled = false;
                btnGuardar.Enabled = false;
                btnLimpiar.Enabled = false;
                return;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region TraeCaja
    public void TraeCaja(Cajas oCaja)
    {
        try
        {
            /// Carga lista items de Caja
            ItemCaja itemCaja = new ItemCaja();
            List<ItemCaja> listaCaja = new List<ItemCaja>();
            BMItemCaja bmItemCaja = new BMItemCaja(Connection);
            itemCaja.Id_Caja = oCaja.Id_Caja;
            listaCaja = bmItemCaja.BMlistaCaja(itemCaja);
            Session["listaCaja"] = listaCaja;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion
   
}

